home *** CD-ROM | disk | FTP | other *** search
/ The Original Shareware 1.1 / The Original Shareware (WeMake CDs)(Volume 1.1)(CDs, Inc)(1993).iso / 6 / hanson.zip / SETS.C < prev    next >
Text File  |  1985-12-31  |  2KB  |  76 lines

  1. /* set handlers and other parts for translit */
  2.  
  3.  
  4. makset(array,k,set,size)
  5. int k,size;
  6. char set[],array[];
  7. {
  8.     int j;
  9.  
  10.     j = 0;
  11.     filset(EOS,array,k,set,&j,size);
  12.     return(addset(EOS,set,&j,size));
  13. }
  14.  
  15. addset(c,set,j,maxsize)
  16. int *j,maxsize;
  17. char c,set[];
  18. {
  19.     if(*j >maxsize)
  20.         return(NO);
  21.     else {
  22.         set[*j] = c;
  23.         (*j)++;
  24.         return(YES);
  25.         }
  26. }
  27.  
  28. #define DASH '-'
  29. #define ESCAPE '\\'
  30.  
  31. /* expand set at array[i] into set[j], stop at delim */
  32. filset(delim,array,i,set,j,maxset)
  33. int i,*j,maxset;
  34. char array[],set[];
  35. char delim;
  36. {
  37.     char esc();
  38.     static char digits[] ={ "0123456789" };
  39.     static char lowalf[] ={ "abcdefghijklmnopqrstuvwxyz" };
  40.     static char upalf[] ={ "ABCDEFGHIJKLMNOPQRSTUVWXYZ" };
  41.  
  42.  
  43.     for (;array[i] != delim && array[i] != EOS; ++i)
  44.         if(array[i] == ESCAPE)
  45.             addset(esc(array,&i),set,j,maxset);
  46.         else if (array[i] != DASH)
  47.             addset(array[i],set,j,maxset);
  48.         else if ((*j) <=0 || array[i+1] == EOS) /*literal - */
  49.             addset(DASH,set,j,maxset);
  50.         else if (index(digits,set[(*j)-1])>-1)
  51.             dodash(digits,array,&i,set,j,maxset);
  52.         else if (index(lowalf,set[(*j)-1])>-1)
  53.             dodash(lowalf,array,&i,set,j,maxset);
  54.         else if (index(upalf,set[*j-1])>-1)
  55.             dodash(upalf,array,&i,set,j,maxset);
  56.         else
  57.             addset(DASH,set,j,maxset); 
  58. }
  59.  
  60.  
  61. /* expand array [i-1]-array[i+1] into set[j]..from valid */
  62. dodash(valid,array,i,set,j,maxset)
  63. int *i,*j,maxset;
  64. char array[],set[],valid[];
  65. {
  66.     int k,limit,index(),addset();
  67.     char esc();
  68.  
  69.     (*i)++;
  70.     (*j)--;
  71.     limit = index(valid,esc(array,i));
  72.     for( k = index(valid,set[*j]) ; k <= limit ; k++)
  73.         addset(valid[k],set,j,maxset);
  74. }
  75.  
  76.